basics of factory design pattern